home *** CD-ROM | disk | FTP | other *** search
/ PC World 2004 December / PCWorld_2004-12_cd.bin / software / temacd / tiny / tf6pro-6[1].0.140.exe / Tiny Firewall Pro 6.0.msi / ws_syspriv.js < prev    next >
Encoding:
JavaScript  |  2004-07-20  |  35.4 KB  |  1,373 lines

  1. /*//////////////////////////////////////////////////////////////////////
  2. filename:         ws_misc.js
  3. copyright(c):     2002, 2003 Tiny Software Inc (http://www.tinysoftware.com)
  4. author:         Martin Navratil (mnavratil@tinysoftware.com)
  5. product:         Tiny Personal Firewall 5.x
  6. description:     javascript functions for ws_misc.html
  7. ///////////////////////////////////////////////////////////////////////*/
  8. var    ERR_GET_MODULE_PARSER = "Error: Cannot get Parser object for Sandbox",
  9.     ERR_GET_RULELIST = "Error: Cannot get rule list from parser",
  10.     THIS_DIV = "misc",
  11.     HTML_THIS_DIV_HEADER = '<DIV id=' + THIS_DIV + '>',
  12.     HTML_THIS_DIV_TRAILER = "</DIV>",
  13.      HTML_TABLE_HEADER = '<table border="1" align="left" cellpadding=5 cellspacing=0 bordercolor="#000000" bgcolor="#E7EFF7">',
  14.     HTML_TABLE_TRAILER = "</table>",
  15.     HTML_TABLE_LABEL_HEADER1 = "<table width=100% border=0 cellspacing=0 cellpadding=0><tr bgcolor=",
  16.     HTML_TABLE_LABEL_HEADER2 = "><td height=25 align=middle><font color=white><B>",
  17.     HTML_TABLE_LABEL_TRAILER = "</B></font></td></tr></table>",
  18.     HTML_TABLES_SEPARATOR = "<BR/><BR/>"
  19.     HTML_ROW_HEADER = '<TR height="40">',
  20.     HTML_SYSTEM_ROW_HEADER = '<TR height="40" bgcolor="#f2f2f2">',
  21.     HTML_ROW_TRAILER = "</TR>",
  22.     HTML_HEADER_HEADER = '<TH style="font-face:bold;font-size:8pt;">',
  23.     HTML_HEADER_TRAILER = "</TH>",
  24.     HTML_CELL_HEADER = "<TD align=center>",
  25.     HTML_CELL_TRAILER = "</TD>",
  26.     HTML_ID_EDIT_HEADER = '<INPUT type=edit size=3 ',
  27.     HTML_ID_EDIT_TRAILER = '></INPUT>',
  28.     HTML_ID_LINK_HEADER = '<A href=# ',
  29.     HTML_ID_LINK_TRAILER = '</A>',
  30.     HTML_CHECK_HEADER = '<INPUT type="checkbox" ',
  31.     HTML_CHECK_TRAILER = '/>',
  32.     HTML_INSERT_USER_RULE = '<IMG src="ico-plus.gif" align=absMiddle alt = "Rule for non-system processes"/>  Rule for non-system apps',
  33.     HTML_INSERT_SYSTEM_RULE = '<IMG src="ico-plus.gif" align=absMiddle alt = "Rule for system processes"/>  Rule for system apps',
  34.     HTML_ADD_EXISTING = '<IMG src="ico-plus.gif" align=absMiddle alt = "Add existing rule"/>Add existing rule',
  35.     HTML_ICO_MINUS = '<IMG src="ico-minus.gif" alt="Delete rule"/>',
  36.     HTML_SELECT_HEADER = '<SELECT ',
  37.     HTML_SELECT_TRAILER = '></SELECT>',
  38.     HTML_OPTION_HEADER = '<OPTION value="',
  39.     HTML_OPTION_TRAILER = '</OPTION>';
  40.     HTML_DISABLED = 'disabled';
  41.  
  42.  
  43. var    NO_COLUMNS = 5;
  44.  
  45. var    TXT_PRO_HIGH_MASTER = "High Priority List - Common rules",
  46.     TXT_CLIENT = "Medium Priority List - Non-Privileged User Defined",
  47.     TXT_PRO_LOW_MASTER = "Low Priority List - Common rules",
  48.     TXT_DELETING = "Deleting rule",
  49.     TXT_QST_REALLYDELETE1 = 'Do you really want to delete ',
  50.     TXT_QST_REALLYDELETE2 = ' from the list of rules?',
  51.     TXT_NEW_EXC_APP = 'Enter app./group',
  52.     
  53. // columns
  54.     TXT_ID_CAPTION = "Rule #",
  55.     TXT_APP_CAPTION = "Application",
  56.     TXT_ACCESS = "Allow dangerous system access",
  57.     TXT_AUDIT = "Monitor dangerous system access",
  58.     TXT_ASGNMT = (window.external.Managed || window.external.Context ? "Assignment" : "Users"),
  59.     TXT_ALLUSERS = "All Users (*)";
  60.     
  61. var    arrAccessResultStrings = new Array("Prevent", "Allow", "Ask User");
  62. var    arrAuditLevelStrings = new Array("Ignore", "Monitor", "Alert");
  63. var    arrVBAOptions = new Array("Inherit from parent", "Use custom settings",
  64.                     "Do not run macro");
  65. var    arrGuardIds = new Array('V'.charCodeAt(0), 'Y'.charCodeAt(0), 'G'.charCodeAt(0)),
  66.     strDisabled = new Array(3);
  67.  
  68. var    AR_ALLOW = 0x0001,
  69.     AR_PREVENT = 0x0000,
  70.     AR_ASKUSER = 0x0002;
  71.  
  72. var    AL_IGNORE = 0x0000,
  73.     AL_MONITOR = 0x0001,
  74.     AL_ALERT = 0x0002;
  75.  
  76. var    OT_VBAMACRO =     0x00000020,
  77.     OT_SYSTEMPRIV =    0x00000080,
  78.     OT_DEVICEPRIV =    0x00000100;
  79.  
  80. var     PRIOR_LOW = 0,
  81.     PRIOR_NORMAL = 1,
  82.     PRIOR_HIGH = 2;
  83.  
  84. var    RT_DIRECT    = 0,
  85.     RT_DEFINITION    = RT_DIRECT + 1;
  86.  
  87. var    AT_SYSPRIV_FORCED_PROC_THREAD_TERM = 0x00002000,
  88.     AT_SYSPRIV_SYSTEMSHUTDOWN = 0x00000100,
  89.     AT_SYSPRIV_SETOBJSECURITY = 0x00000200,
  90.     AT_SYSPRIV_INJECTCODE = 0x00001000,
  91.     AT_SYSPRIV_ACQUIRESYSPRIV = 0x00008000,
  92.     AT_SYSPRIV_CLIPBOARDACCESS = 0x00004000,
  93.     AT_SYSPRIV_ALL = 0x0000F300,
  94.  
  95.     AT_VBA_FULL = 0x00000005;
  96.  
  97. var iLastIndex = -1;
  98.  
  99. var arrARImgSrc = new Array(),
  100.     arrALImgSrc = new Array(),
  101.     arrARTitles = new Array(),
  102.     arrALTitles = new Array();
  103.     
  104. arrARImgSrc[AR_ALLOW] = "allow.gif";
  105. arrARImgSrc[AR_PREVENT] = "prevent.gif";
  106. arrARImgSrc[AR_ASKUSER] = "askuser.gif";
  107.  
  108. arrALImgSrc[AL_IGNORE] = "ignore.gif";
  109. arrALImgSrc[AL_MONITOR] = "monitor.gif";
  110.  
  111. arrARTitles[AR_ALLOW] = "Allow";
  112. arrARTitles[AR_PREVENT] = "Prevent";
  113. arrARTitles[AR_ASKUSER] = "Ask User";
  114.  
  115. arrALTitles[AL_IGNORE] = "Ignore";
  116. arrALTitles[AL_MONITOR] = "Monitor";
  117.  
  118. var arrLinksApp = new Array();
  119.  
  120. var NO_SYSPRIV_ACCESS_TYPES = 6;
  121. var    SysprivAccessTypes = new Array(NO_SYSPRIV_ACCESS_TYPES);
  122.  
  123. SysprivAccessTypes[0] = AT_SYSPRIV_FORCED_PROC_THREAD_TERM;
  124. SysprivAccessTypes[1] = AT_SYSPRIV_SYSTEMSHUTDOWN;
  125. SysprivAccessTypes[2] = AT_SYSPRIV_SETOBJSECURITY;
  126. SysprivAccessTypes[3] = AT_SYSPRIV_INJECTCODE;
  127. SysprivAccessTypes[4] = AT_SYSPRIV_ACQUIRESYSPRIV;
  128. SysprivAccessTypes[5] = AT_SYSPRIV_CLIPBOARDACCESS;
  129.  
  130. var strHeaders = new Array(NO_COLUMNS);
  131. strHeaders[0] = TXT_ID_CAPTION;
  132. strHeaders[1] = TXT_APP_CAPTION;
  133. strHeaders[2] = TXT_ACCESS;
  134. strHeaders[3] = TXT_AUDIT;
  135. strHeaders[4] = TXT_ASGNMT;
  136.  
  137. var     arrAllClientRules = null,    // all VBA, SysPrio, DevPrio rules from Client db
  138.     arrAllServerRules = null,        // dtto. from server db
  139.     arrRuleTriples;            // rule triples from both dbs grouped by app/group 
  140.  
  141. var ServerParser = null, ClientParser = null, ServerAppParser = null, ClientAppParser = null, ClientRuleList = null, 
  142.     ServerRuleList = null;
  143.  
  144. var     firstLabel = new Array(),
  145.     arrLabelTypes = new Array();
  146.  
  147. var iMaxServerId = 0, iMaxClientId = 0;
  148.  
  149. var iContext = 0, iManaged = 0, iProductType = window.external.ProductType;
  150. var ctrlAsgnmt = window.external.Context ? parent.frames.assignmentFrame.ctrlAsgnmt : null;
  151. var strAsgnmt = "";
  152.  
  153. function SetAssignment(str)
  154. {
  155.     strAsgnmt = str;
  156.     _ruleList.innerHTML = GetRuleList();
  157. }
  158.  
  159. function RuleTriple(r1, r2, r3)
  160. {
  161.     this[0] = r1;
  162.     this[1] = r2;
  163.     this[2] = r3;
  164. }
  165.  
  166. function LoadAllRules(ruleList, arrRulesToStore)
  167. {
  168.  
  169.     var i, j, maxId = 0;
  170.     ruleListEnum = new Enumerator(ruleList);
  171.     ruleListEnum.moveFirst();
  172.     j = arrRulesToStore.length;
  173.        while (!ruleListEnum.atEnd())
  174.        {
  175.         //add option to array
  176.         var rule = ruleListEnum.item();
  177.  
  178.         var id;
  179.         var curOT = rule.ObjectType;
  180.         if (curOT == OT_VBAMACRO || curOT == OT_SYSTEMPRIV || curOT == OT_DEVICEPRIV)
  181.         {
  182.             id = GetRuleID(rule);
  183.             if (id > maxId)
  184.                 maxId = id;
  185.  
  186. // find 'full' access type, convert it into specific access types
  187.             var adList = rule.AccessDescriptorList;
  188.             var adEnum = new Enumerator(adList);
  189.             adEnum.moveFirst();
  190.             var accessDescriptor = null;
  191.             if (!adEnum.atEnd())
  192.             {
  193.                 var acCur = adEnum.item();
  194.                 switch(curOT)
  195.                 {
  196.                 case OT_VBAMACRO:
  197.                     if (acCur.AccessType == AT_VBA_FULL)
  198.                     {
  199.                         adList.Clear();
  200.                         for (i = 0; i < 4; i++)
  201.                         {
  202.                             var ad = adList.CreateAccessDescriptor();
  203.                             ad.AccessType = VbaAccessTypes[i];
  204.                             ad.AccessResult = acCur.AccessResult;
  205.                             ad.AuditLevel = acCur.AuditLevel;
  206.                             adList.Insert(ad);
  207.                         }
  208.                     }
  209.                     break;
  210.                 case OT_SYSTEMPRIV:
  211.                     if (acCur.AccessType == AT_SYSPRIV_ALL)
  212.                     {
  213.                         adList.Clear();
  214.                         for (i = 0; i < 6; i++)
  215.                         {
  216.                             var ad = adList.CreateAccessDescriptor();
  217.                             ad.AccessType = SysprivAccessTypes[i];
  218.                             ad.AccessResult = acCur.AccessResult;
  219.                             ad.AuditLevel = acCur.AuditLevel;
  220.                             adList.Insert(ad);
  221.                         }
  222.                     }
  223.                     break;
  224.                 }
  225.             }
  226.  
  227.             arrRulesToStore[j++] = rule;
  228.         }
  229.           ruleListEnum.moveNext();                 //Get next rule
  230.        }
  231.     return maxId;
  232. }
  233.  
  234. function GetRuleList()
  235. {
  236.     var Option, OptList, strRules = HTML_THIS_DIV_HEADER;
  237.     iContext = window.external.Context;
  238.     iManaged = window.external.Managed;
  239.     if (iContext)
  240.         iManaged = 1;
  241.  
  242.     if (iContext == 0)
  243.         strAsgnmt = window.external.LoggedUser;
  244.  
  245.     try
  246.     {
  247.         ServerParser = window.external.ServerParser(1) ;
  248.         ClientParser = window.external.ClientParser(1) ;
  249.         ServerAppParser = window.external.ServerParser(64) ;
  250.         ClientAppParser = window.external.ClientParser(64) ;
  251.     } catch(e)
  252.     {
  253.         alert(ERR_GET_MODULE_PARSER);
  254.         return;
  255.     }
  256.  
  257.     try
  258.     {
  259.         if (ServerParser != null)
  260.             ServerRuleList = ServerParser.RuleList;
  261.         if (ClientParser != null)
  262.             ClientRuleList = ClientParser.RuleList;
  263.     } catch(e)
  264.     {
  265.         alert(ERR_GET_RULELIST);
  266.         return;
  267.     }
  268.  
  269.     arrAllClientRules = new Array();
  270.     arrAllServerRules = new Array();
  271.     arrRuleTriples = new Array();
  272.  
  273.     if ((iContext == 0 && iManaged == 1) || !window.external.IsAdmin)
  274.     {
  275.         strDisabled[PRIOR_HIGH] = HTML_DISABLED;
  276.         strDisabled[PRIOR_LOW] = HTML_DISABLED;
  277.     }
  278.     else
  279.     {
  280.         strDisabled[PRIOR_HIGH] = '';
  281.         strDisabled[PRIOR_LOW] = '';
  282.     }
  283.     
  284.     strDisabled[PRIOR_NORMAL] = "";
  285.  
  286.     if (ClientRuleList != null)
  287.         iMaxClientId = LoadAllRules(ClientRuleList, arrAllClientRules);
  288.     if (ServerRuleList != null)
  289.         iMaxServerId = LoadAllRules(ServerRuleList, arrAllServerRules);
  290.     
  291. //    iShowObjects = cmbShowObjects.options[cmbShowObjects.selectedIndex].value;
  292.     iShowObjects = 4;
  293.     if (ServerRuleList != null && (iShowObjects == 0 || iShowObjects == 2 || iShowObjects == 3))
  294.     {
  295.         strRules = HTML_TABLE_LABEL_HEADER1 + "#01088b" + HTML_TABLE_LABEL_HEADER2 + TXT_PRO_HIGH_MASTER + HTML_TABLE_LABEL_TRAILER;
  296.         strRules += GetRuleListByPriority(arrAllServerRules, PRIOR_HIGH, "Server")
  297.                 + HTML_TABLES_SEPARATOR;
  298.     }
  299.  
  300.     if (ClientRuleList != null && (iShowObjects == 0 || iShowObjects == 1))
  301.     {
  302.         strRules += HTML_TABLE_LABEL_HEADER1 + "#7aa1e6" + HTML_TABLE_LABEL_HEADER2 + TXT_CLIENT + HTML_TABLE_LABEL_TRAILER;
  303.         strRules += GetRuleListByPriority(arrAllClientRules, PRIOR_NORMAL, "Client")
  304.             + HTML_TABLES_SEPARATOR;
  305.     }
  306.  
  307.     if (ServerRuleList != null && (iShowObjects == 0 || iShowObjects == 2 || iShowObjects == 4))
  308.     {
  309.         strRules += HTML_TABLE_LABEL_HEADER1 + "#01088b" + HTML_TABLE_LABEL_HEADER2 + TXT_PRO_LOW_MASTER + HTML_TABLE_LABEL_TRAILER;
  310.         strRules += GetRuleListByPriority(arrAllServerRules, PRIOR_LOW, "Server")
  311.     }
  312.  
  313.     if (ServerRuleList != null && (iShowObjects == 0 || iShowObjects == 2 || iShowObjects == 4))
  314.     {
  315.         strRules += TXT_SAFETOINJECT;
  316.         strRules += GetDllLabelListHtmlStr( );
  317.     }
  318.  
  319.     strRules += HTML_THIS_DIV_TRAILER;
  320.     return strRules;
  321. }
  322.  
  323. function GetRuleListByPriority(arrAllRules, prio, ParserName)
  324. {
  325.  
  326.     var strRetVal = '<table width="350" border="0" bgcolor="#E7EFF7"><tr><td width=200>';
  327.     strRetVal += '<A href="#" style="color: Black; text-decoration: none;" ' + strDisabled[prio];
  328.     if (strDisabled[prio] == '')
  329.         strRetVal += 'onclick="OnAdd(' + prio + ',0)"';
  330.     strRetVal += '>' + HTML_INSERT_USER_RULE + '</A></td>';
  331.     if (PRIOR_NORMAL != prio)
  332.     {
  333.         strRetVal += '<td width=175>';
  334.         strRetVal += '<A href="#" style="color: Black; text-decoration: none;" ' + strDisabled[prio];
  335.         if (strDisabled[prio] == '')
  336.             strRetVal += 'onclick="OnAdd(' + prio + ',1)"';
  337.         strRetVal += '>' + HTML_INSERT_SYSTEM_RULE + '</A></td>';
  338.         strRetVal += '</td>';
  339.     }
  340.     strRetVal += '</tr></table>';
  341.     var i;
  342.  
  343.     strRetVal += HTML_TABLE_HEADER;
  344.  
  345.     strRetVal += HTML_ROW_HEADER;
  346.     for (i = 0; i < NO_COLUMNS; i++) {
  347.         strRetVal += HTML_HEADER_HEADER + strHeaders[i] + HTML_HEADER_TRAILER;
  348.     }
  349.     strRetVal += HTML_ROW_TRAILER;
  350.  
  351.     j = arrRuleTriples.length;
  352.     for (i = 0; i < arrAllRules.length; i++)
  353.     {
  354.         var rule = arrAllRules[i];
  355.         var ot = rule.ObjectType
  356.         if (!RuleTripleExists(rule) && 
  357.             (ot == OT_VBAMACRO || ot == OT_SYSTEMPRIV || ot == OT_DEVICEPRIV)
  358.             && rule.Priority == prio)
  359.         {
  360.             var ruleTriple;
  361.             switch (ot)
  362.             {
  363.             case OT_VBAMACRO:
  364.                 ruleTriple = new RuleTriple(rule, 
  365.                             GetSysPrioRule(rule, arrAllRules),
  366.                             GetDevPrioRule(rule, arrAllRules)
  367.                             );
  368.                 break;
  369.             case OT_SYSTEMPRIV:
  370.                 ruleTriple = new RuleTriple(GetVBARule(rule, arrAllRules),
  371.                             rule, 
  372.                             GetDevPrioRule(rule, arrAllRules)
  373.                             );
  374.                 break;
  375.             case OT_DEVICEPRIV:
  376.                 ruleTriple = new RuleTriple(GetVBARule(rule, arrAllRules),
  377.                             GetSysPrioRule(rule, arrAllRules),
  378.                             rule
  379.                             );
  380.                 break;
  381.             }
  382.             if (RuleTripleContainsRule(ruleTriple))
  383.             {
  384.                 arrRuleTriples[j++] = ruleTriple;
  385.                 strRetVal += GetRuleHtmlStr(ruleTriple, prio, arrRuleTriples.length - 1);
  386.             }
  387.         }
  388.        }
  389.     strRetVal += HTML_TABLE_TRAILER;
  390.     return strRetVal;
  391. }
  392.  
  393. function RuleTripleContainsRule(ruleTriple)
  394. {
  395.     var i;
  396.     for (i = 0; i < 3; i++)
  397.         if (ruleTriple[i] != null)
  398.             return 1;
  399.     return 0;
  400. }
  401.  
  402. function GetApplication(ruleTriple)
  403. {
  404.     var i;
  405.     for (i = 0; i < 3; i++)
  406.         if (ruleTriple[i] != null)
  407.             return ruleTriple[i].Application;
  408. }
  409.  
  410. function GetPriority(ruleTriple)
  411. {
  412.     var i;
  413.     for (i = 0; i < 3; i++)
  414.         if (ruleTriple[i] != null)
  415.             return ruleTriple[i].Priority;
  416. }
  417.  
  418. function GetRuleAccount(ruleTriple)
  419. {
  420.     var i;
  421.     for (i = 0; i < 3; i++)
  422.         if (ruleTriple[i] != null)
  423.             return ruleTriple[i].Account;
  424. }
  425.  
  426. function GetRuleID(rule)
  427. {
  428.     return rule.RuleID & 0x0000ffff;
  429. }
  430.  
  431. function GetRuleTripleID(ruleTriple)
  432. {
  433.     var i;
  434.     for (i = 0; i < 3; i++)
  435.         if (ruleTriple[i] != null)
  436.         {
  437.             return ruleTriple[i].RuleID & 0x0000ffff;
  438.         }
  439. }
  440.  
  441. function GetAssignment(ruleTriple)
  442. {
  443.     var i;
  444.     for (i = 0; i < 3; i++)
  445.         if (ruleTriple[i] != null)
  446.         {
  447.             return ruleTriple[i].Assignment;
  448.         }
  449. }
  450.  
  451. function GetRuleHtmlStr(ruleTriple, prio, index)
  452. {
  453.     var strRule;
  454.     if (RA_SYSTEM == GetRuleAccount(ruleTriple))
  455.         strRule = HTML_SYSTEM_ROW_HEADER;
  456.     else
  457.         strRule = HTML_ROW_HEADER;
  458.         
  459.     if (!RuleTripleContainsRule(ruleTriple))
  460.         return "";
  461.  
  462.     var ruleAsgnmt = GetAssignment(ruleTriple);
  463.     var ruleAccount = GetRuleAccount(ruleTriple);
  464.  
  465.     switch (iContext)
  466.     {
  467.     case 0:
  468.         ruleAsgnmt = ruleAsgnmt.toLowerCase( );
  469.         if (ruleAsgnmt != "*" && strAsgnmt != TXT_ALLUSERS && 
  470.                 ruleAsgnmt.indexOf(strAsgnmt.toLowerCase( )) == -1)
  471.         {
  472.             return "";
  473.         }
  474.         break;
  475.     case 1:
  476.         if (!ctrlAsgnmt.CheckRule(ruleAsgnmt))
  477.         {
  478.             return "";
  479.         }
  480.         break;
  481.     }
  482.  
  483.     var strID = GetRuleTripleID(ruleTriple);
  484.     strRule += HTML_CELL_HEADER + strID + HTML_CELL_TRAILER;
  485.  
  486.     var strAppName = GetApplication(ruleTriple);
  487.  
  488.     if (strAppName == '')
  489.     {
  490.         ChangeApplication(ruleTriple, '*');
  491.         if (RA_SYSTEM == ruleAccount)
  492.             strAppName = STR_ALL_SYSTEM;
  493.         else
  494.             strAppName = STR_ALL_NONSYSTEM;
  495.         strRule += HTML_CELL_HEADER + 
  496.             GetLabelListHtmlStr(prio, ruleAccount, 'SELECT_' + index, '*', index) +
  497.             HTML_CELL_TRAILER;
  498.     } else
  499.     {
  500.         strRule += HTML_CELL_HEADER;
  501.         var strLinkApp = HTML_ID_LINK_HEADER;
  502.         strLinkApp += 'id="app_' + index + '"';
  503.         strLinkApp += ' onclick= ';
  504.         if (strAppName == '*')
  505.         {
  506.             if (RA_SYSTEM == ruleAccount)
  507.                 strAppName = STR_ALL_SYSTEM;
  508.             else
  509.                 strAppName = STR_ALL_NONSYSTEM;
  510.         }
  511.         if (strDisabled[prio] == "")
  512.             strLinkApp += 
  513.                 '\'AppComboCleanup('+index+');this.outerHTML=GetLabelListHtmlStr(' + prio + ',' + ruleAccount + ',"SELECT_' + index + 
  514.                 '","' + strAppName + '",' + index +');\' ';
  515.         else
  516.             strLinkApp += '"" ';
  517.         strLinkApp += strDisabled[prio] + '>' + strAppName + HTML_ID_LINK_TRAILER;
  518.         arrLinksApp[index] = strLinkApp;
  519.         strRule += strLinkApp + HTML_CELL_TRAILER;
  520.     }
  521.  
  522.     var AccessType, j;
  523.     strRule += 
  524.           HTML_CELL_HEADER + GenerateAccessResult(ruleTriple[1], prio, 
  525.           '"OnAccessResultChange(' + index + ',' + 
  526.           'this.checked,' + prio + ')"');
  527.     strRule += HTML_CELL_TRAILER + HTML_CELL_HEADER;
  528.     strRule += GenerateAuditLevel(ruleTriple[1], prio, 
  529.         '"OnAuditLevelChange(' + index + ',' + 'this.checked,' + prio + ')"') + HTML_CELL_TRAILER;
  530.  
  531.     if (iManaged == 0 /* Home Version  */ && prio != PRIOR_NORMAL ||
  532.         iManaged == 1 && iContext == 1 /* BBE */)
  533.     {
  534.         strRule += HTML_CELL_HEADER;
  535.         strAsgnDisabled = strDisabled[prio];
  536.         if (iProductType == 1)
  537.             strAsgnDisabled = HTML_DISABLED;
  538.         if (iManaged)
  539.         {
  540.             strRule += HTML_ID_EDIT_HEADER + ' value="' + GetAssignment(ruleTriple) + '"' + 
  541.             ' onchange="OnAsgnmtChange(' + index + ',this.value);" ' + strAsgnDisabled + HTML_ID_EDIT_TRAILER;
  542.         } else
  543.         {
  544.             strRule += HTML_ID_LINK_HEADER;
  545.             strRule += ' onclick=';
  546.             if (strAsgnDisabled == '')
  547.                 strRule += '"OnUsersChange(' + index +');"';
  548.             else
  549.                 strRule += '"" ';
  550.             strRule += strAsgnDisabled + '>' + GetAssignment(ruleTriple) + '</A>';
  551.         }
  552.         strRule += HTML_CELL_TRAILER;
  553.     }
  554.     else
  555.     {
  556.         strRule += HTML_CELL_HEADER + HTML_CELL_TRAILER;
  557.     }
  558.  
  559.     strRule += HTML_CELL_HEADER + 
  560.     '<A href="#" ' + strDisabled[prio];
  561.     if (strDisabled[prio] == "")
  562.         strRule += 'onclick="OnDelete(' + prio + ',' + index + ')"';
  563.     strRule += '>' + HTML_ICO_MINUS + HTML_CELL_TRAILER;
  564.  
  565.     strRule += HTML_ROW_TRAILER;
  566.     return strRule;
  567. }
  568.  
  569.  
  570. function RuleTripleExists(rule)
  571. {
  572.     var appRule = rule.Application;
  573.     var rulePrio = rule.Priority;
  574.     var ruleOT = rule.ObjectType;
  575.     var asgnmtRule = rule.Assignment;
  576.     var indIntoTriple;
  577.     switch (ruleOT)
  578.     {
  579.     case OT_VBAMACRO:
  580.         indIntoTriple = 0;
  581.         break;
  582.     case OT_SYSTEMPRIV:
  583.         indIntoTriple = 1;
  584.         break;
  585.     case OT_DEVICEPRIV:
  586.         indIntoTriple = 2;
  587.         break;
  588.     }
  589.     for (i = 0; i < arrRuleTriples.length; i++)
  590.     {
  591.         if (    GetPriority(arrRuleTriples[i]) == rulePrio &&
  592.             GetApplication(arrRuleTriples[i]) == appRule &&
  593.             GetAssignment(arrRuleTriples[i]) == asgnmtRule &&
  594.             arrRuleTriples[i][indIntoTriple] == rule)
  595.             return 1;
  596.     }
  597.     return 0;
  598. }
  599.  
  600.  
  601. function GetVBARule(rule, arrAllRules)
  602. {
  603.     var strApplication = rule.Application;
  604.     var ruleFound = null;
  605.     var i;
  606.  
  607.     for (i = 0; i < arrAllRules.length; i++)
  608.     {
  609.         var ruleCur = arrAllRules[i];
  610.         if (ruleCur.ObjectType == OT_VBAMACRO &&
  611.             ruleCur.Application == strApplication)
  612.         {
  613.             ruleFound = ruleCur;
  614.             break;
  615.         }
  616.     }
  617.     return ruleFound;    
  618. }
  619.  
  620. function GetSysPrioRule(rule, arrAllRules)
  621. {
  622.     var strApplication = rule.Application;
  623.     var ruleFound = null;
  624.     var i;
  625.  
  626.     for (i = 0; i < arrAllRules.length; i++)
  627.     {
  628.         var ruleCur = arrAllRules[i];
  629.         if (ruleCur.ObjectType == OT_SYSTEMPRIV &&
  630.             ruleCur.Application == strApplication)
  631.         {
  632.             ruleFound = ruleCur;
  633.             break;
  634.         }
  635.     }
  636.     return ruleFound;    
  637. }
  638.  
  639. function GetDevPrioRule(rule, arrAllRules)
  640. {
  641.     var strApplication = rule.Application;
  642.     var ruleFound = null;
  643.     var i;
  644.  
  645.     for (i = 0; i < arrAllRules.length; i++)
  646.     {
  647.         var ruleCur = arrAllRules[i];
  648.         if (ruleCur.ObjectType == OT_DEVICEPRIV &&
  649.             ruleCur.Application == strApplication)
  650.         {
  651.             ruleFound = ruleCur;
  652.             break;
  653.         }
  654.     }
  655.     return ruleFound;    
  656. }
  657.  
  658. function OnAdd(priority, account)
  659. {
  660.     var ruleList;
  661.     switch (priority)
  662.     {
  663.     case PRIOR_HIGH:
  664.     case PRIOR_LOW:
  665.         ruleList = ServerRuleList;
  666.         break;
  667.     case PRIOR_NORMAL:
  668.         ruleList = ClientRuleList;
  669.     }
  670.  
  671.     var newRule = ruleList.CreateRule();
  672.     switch (priority)
  673.     {
  674.     case PRIOR_HIGH:
  675.     case PRIOR_LOW:
  676.         SetRuleID(newRule, 1, ++iMaxServerId, 1);
  677.         break;
  678.     case PRIOR_NORMAL:
  679.         SetRuleID(newRule, 1, ++iMaxClientId, 0);
  680.     }
  681.     newRule.Application = '';
  682.     newRule.Priority = priority;
  683.     newRule.ObjectType = OT_SYSTEMPRIV;
  684.     newRule.Path = "*";
  685.     newRule.PathType = RT_DEFINITION;
  686.     newRule.Assignment = (window.external.Context ? ctrlAsgnmt.Assignment : "*");
  687.     newRule.Account = account;
  688.     ruleList.Insert(newRule, newRule);
  689.     _ruleList.innerHTML = GetRuleList();
  690. }
  691.  
  692. function OnDelete(priority, index)
  693. {
  694.     var arg = new Array(2);
  695.     var i;
  696.     var strNewAsgnmt = "";
  697.     var curStrAsgnmt = (window.external.Context ? ctrlAsgnmt.Assignment : strAsgnmt);
  698.     
  699.     if (window.external.Context == 1 && !ctrlAsgnmt.IsEmptyOrAll(curStrAsgnmt))
  700.     {
  701.         try 
  702.         {
  703.             ruleTriple = arrRuleTriples[index];
  704.             strNewAsgnmt = ctrlAsgnmt.Remove(GetAssignment(ruleTriple));
  705.             for (i = 0; i < 3; i++)
  706.                 if (ruleTriple[i] != null)
  707.                     ruleTriple[i].Assignment = strNewAsgnmt;
  708.         } catch (e)
  709.         {
  710.             alert("Access violation");
  711.         }
  712.     }
  713.  
  714.     if (window.external.Context == 0 || strNewAsgnmt == "")
  715.     {
  716.  
  717.         arg[0] = TXT_QST_REALLYDELETE1 + '"' + GetApplication(arrRuleTriples[index]) + '"' +
  718.             TXT_QST_REALLYDELETE2;
  719.         arg[1] = TXT_DELETING;
  720.         var answer=showModalDialog('question.html', arg, 'dialogWidth=300pt;dialogHeight=100pt;');
  721.         if (answer == 0)
  722.             return;
  723.  
  724.         var Parser;
  725.         switch (priority)
  726.         {
  727.         case PRIOR_HIGH:
  728.         case PRIOR_LOW:
  729.             ruleList = ServerRuleList;
  730.             break;
  731.         case PRIOR_NORMAL:
  732.             ruleList = ClientRuleList;
  733.             break;
  734.         }
  735.  
  736.         try 
  737.         {
  738.             ruleTriple = arrRuleTriples[index];
  739.             for (i = 0; i < 3; i++)
  740.                 if (ruleTriple[i] != null)
  741.                     ruleList.Remove(ruleTriple[i]);
  742.         } catch (e)
  743.         {
  744.             alert("Access violation");
  745.         }
  746.     }
  747.     _ruleList.innerHTML = GetRuleList();
  748. }
  749.  
  750. function OnAppChange(prio, elem, index, value)
  751. {
  752.     var i;
  753.     var ruleTriple, ruleAccount;
  754.     try
  755.     {
  756.         ruleTriple = arrRuleTriples[index];
  757.         for (i = 0; i < 3; i++)
  758.         {
  759.             if (ruleTriple[i] != null)
  760.             {
  761.                 arrRuleTriples[index][i].Application = value;
  762.                 arrRuleTriples[index][i].AppType = arrLabelTypes[value];
  763.             }
  764.         }
  765.     } catch (e)
  766.     {
  767.         alert("Access violation");
  768.     }
  769.     var strLinkApp = HTML_ID_LINK_HEADER;
  770.     strLinkApp += 'id="app_' + index + '"';
  771.     strLinkApp += ' onclick=';
  772.     ruleAccount = GetRuleAccount(ruleTriple);
  773.     if (strDisabled[prio] == "")
  774.         strLinkApp += 
  775.                 '\'AppComboCleanup('+index+');this.outerHTML=GetLabelListHtmlStr(' + prio + ',' + ruleAccount + ',"SELECT_' + index + 
  776.                 '","' + value + '",' + index +');\' ';
  777.     else
  778.         strLinkApp += '"" ';
  779.  
  780.     var strAppName = value;
  781.     
  782.     if ('*' == strAppName)
  783.     {
  784.         if (RA_SYSTEM == ruleAccount)
  785.             strAppName = STR_ALL_SYSTEM;
  786.         else
  787.             strAppName = STR_ALL_NONSYSTEM;
  788.     }
  789.  
  790.     strLinkApp += strDisabled[prio] + '>' + strAppName + HTML_ID_LINK_TRAILER;
  791.     arrLinksApp[index] = strLinkApp;
  792.     elem.outerHTML = strLinkApp;
  793. }
  794.  
  795. function AppComboCleanup(index)
  796. {
  797.     var iIndex = parseInt(index);
  798.     if (document.getElementById)
  799.     {
  800.         var combo = document.getElementById("SELECT_"+iLastIndex);
  801.         if (combo)
  802.         {
  803.             combo.outerHTML = arrLinksApp[iLastIndex];
  804.         }
  805.     }
  806.     iLastIndex = iIndex;
  807. }
  808.  
  809. function OnIDChange(index, value, priority)
  810. {
  811.     try
  812.     {
  813.         SetRuleTripleID(arrRuleTriples[index], parseInt(value), (priority==PRIOR_HIGH || priority==PRIOR_LOW) ? 1 : 0);
  814.     } catch (e)
  815.     {
  816.         alert("ID already exists");
  817.     }
  818. }
  819.  
  820. function OnAccessResultChange(index, value, prio)
  821. {
  822.     try
  823.     {
  824.         var rule = arrRuleTriples[index][1];
  825.         var adList;
  826.         if (rule == null)
  827.         {
  828.             rule = CreateRule(index, subindex, prio);
  829.         }
  830.         adList = rule.AccessDescriptorList;
  831.         var adEnum = new Enumerator(adList);
  832.         adEnum.moveFirst();
  833.         var accessDescriptor = adEnum.item();
  834.         var auditLevel = AL_IGNORE;
  835.         if (accessDescriptor)
  836.             auditLevel = accessDescriptor.AuditLevel;
  837.         adList.Clear();
  838.         for (var i = 0; i < NO_SYSPRIV_ACCESS_TYPES; i++)
  839.         {
  840.             accessDescriptor = adList.CreateAccessDescriptor();
  841.             accessDescriptor.AccessType = SysprivAccessTypes[i];
  842.             accessDescriptor.AuditLevel = auditLevel;
  843.             accessDescriptor.AccessResult = value ? AR_ALLOW : AR_PREVENT;
  844.             adList.Insert(accessDescriptor);
  845.         }
  846.     } catch (e)
  847.     {
  848.         alert("Access violation");
  849.     }
  850. }
  851.  
  852. function OnAuditLevelChange(index, value, prio)
  853. {
  854.     try
  855.     {
  856.         var rule = arrRuleTriples[index][1];
  857.         var adList;
  858.         if (rule == null)
  859.         {
  860.             rule = CreateRule(index, subindex, prio);
  861.         }
  862.         adList = rule.AccessDescriptorList;
  863.         var adEnum = new Enumerator(adList);
  864.         adEnum.moveFirst();
  865.         var accessDescriptor = adEnum.item();
  866.         var accessResult = AR_ALLOW;
  867.         if (accessDescriptor)
  868.             accessResult = accessDescriptor.AccessResult;
  869.         adList.Clear();
  870.         for (var i = 0; i < NO_SYSPRIV_ACCESS_TYPES; i++)
  871.         {
  872.             accessDescriptor = adList.CreateAccessDescriptor();
  873.             accessDescriptor.AccessType = SysprivAccessTypes[i];
  874.             accessDescriptor.AuditLevel = value ? AL_MONITOR : AL_IGNORE;
  875.             accessDescriptor.AccessResult = accessResult;
  876.             adList.Insert(accessDescriptor);
  877.         }
  878.     } catch (e)
  879.     {
  880.         alert("Access violation");
  881.     }
  882. }
  883.  
  884. function OnAuditLevelRotate(index, subindex, accessType, elem, prio)
  885. {
  886.     var alCur = -1, alNext = -1;
  887.     var src = elem.innerHTML;
  888.     var idxIgnore = src.search(arrALImgSrc[AL_IGNORE]),
  889.     idxMonitor = src.search(arrALImgSrc[AL_MONITOR]);
  890.     if (idxIgnore != -1)
  891.     {
  892.         alCur = AL_IGNORE;
  893.         alNext = AL_MONITOR;
  894.     } else if (idxMonitor != -1)
  895.     {
  896.         alCur = AL_MONITOR;
  897.         alNext = AL_IGNORE;
  898.     }
  899.     if (alNext != -1)
  900.     try
  901.     {
  902.         var rule = arrRuleTriples[index][subindex];
  903.         if (rule == null)
  904.         {
  905.             rule = CreateRule(index, subindex, prio);
  906.         }
  907.         var adList = rule.AccessDescriptorList;
  908.         var adEnum = new Enumerator(adList);
  909.         adEnum.moveFirst();
  910.         var accessDescriptor = null;
  911.         while (!adEnum.atEnd())
  912.         {
  913.             var acCur = adEnum.item();
  914.             if (acCur.AccessType == accessType)
  915.             {
  916.                 accessDescriptor = acCur;
  917.                 break;
  918.             }
  919.             adEnum.moveNext();
  920.         }
  921.         if (accessDescriptor == null)
  922.         {
  923.             accessDescriptor = adList.CreateAccessDescriptor();
  924.             accessDescriptor.AccessType = accessType;
  925.             accessDescriptor.AccessResult = AR_ALLOW;
  926.             adList.Insert(accessDescriptor);
  927.         }
  928.         accessDescriptor.AuditLevel = alNext;
  929.         src = src.replace(arrALImgSrc[alCur], arrALImgSrc[alNext]);
  930.         src = src.replace(arrALTitles[alCur], arrALTitles[alNext]);
  931.         elem.innerHTML = src;
  932.     } catch (e)
  933.     {
  934.         alert("Access violation");
  935.     }
  936. }
  937.  
  938. function OnUsersChange(index)
  939. {
  940.     var ruleTriple = arrRuleTriples[index];
  941.     var strNewUsers = showModalDialog('UsersDlg.html', new Array(GetAssignment(ruleTriple)), 'dialogWidth=215pt;dialogHeight=200pt;');
  942.     try
  943.     {
  944.         var i;
  945.         for (i = 0; i < 3; i++)
  946.             if (ruleTriple[i] != null)
  947.                 ruleTriple[i].Assignment = strNewUsers;
  948.         _ruleList.innerHTML = GetRuleList();
  949.     } catch (e)
  950.     {
  951.         alert("Access violation");
  952.     }
  953. }
  954.  
  955. function OnAsgnmtChange(index, newVal)
  956. {
  957.     try
  958.     {
  959.         var ruleTriple = arrRuleTriples[index];
  960.         var i;
  961.         for (i = 0; i < 3; i++)
  962.             if (ruleTriple[i] != null)
  963.                 ruleTriple[i].Assignment = newVal;
  964.         _ruleList.innerHTML = GetRuleList();
  965.     } catch (e)
  966.     {
  967.         alert("Access violation");
  968.     }
  969. }
  970.  
  971. function GenerateAccessResult(rule, prio, strOnChange)
  972. {
  973.     var strARList = HTML_CHECK_HEADER + strDisabled[prio] + ' onclick=' + strOnChange + ' ';
  974.     var i, iCurAR;    // access result set for this rule and access type
  975.     if (rule != null)
  976.     {
  977.         var enumARDesc = new Enumerator(rule.AccessDescriptorList);
  978.  
  979. // find access descriptor for this access type
  980.         var adList = rule.AccessDescriptorList;
  981.         var adEnum = new Enumerator(adList);
  982.         adEnum.moveFirst();
  983.         var accessDescriptor = adEnum.item();
  984.         if (accessDescriptor == null)
  985.             iCurAR = AR_ALLOW;
  986.         else
  987.             iCurAR = accessDescriptor.AccessResult;
  988.     } else
  989.         iCurAR = AR_ALLOW;
  990.  
  991.     switch (iCurAR)
  992.     {
  993.     case AR_ALLOW:
  994.         strARList += "checked ";
  995.         break;
  996.     default:
  997.         break;
  998.     }
  999.     strARList += HTML_CHECK_TRAILER;
  1000.     return strARList;
  1001. }
  1002.  
  1003. function GenerateAccessResultIcon(rule, prio, accessType, strOnChange)
  1004. {
  1005.     var strARList = '<A ' + strDisabled[prio] + ' onclick=' + strOnChange + '>';
  1006.     var i, iCurAR;    // access result set for this rule and access type
  1007.     if (rule != null)
  1008.     {
  1009.         var enumARDesc = new Enumerator(rule.AccessDescriptorList);
  1010.  
  1011. // find access descriptor for this access type
  1012.         var adList = rule.AccessDescriptorList;
  1013.         var adEnum = new Enumerator(adList);
  1014.         adEnum.moveFirst();
  1015.         var accessDescriptor = null;
  1016.         while (!adEnum.atEnd())
  1017.         {
  1018.             var acCur = adEnum.item();
  1019.             if (acCur.AccessType == accessType)
  1020.             {
  1021.                 accessDescriptor = acCur;
  1022.                 break;
  1023.             }
  1024.             adEnum.moveNext();
  1025.         }
  1026.         if (accessDescriptor == null)
  1027.             iCurAR = AR_ALLOW;
  1028.         else
  1029.             iCurAR = accessDescriptor.AccessResult;
  1030.     } else
  1031.         iCurAR = AR_ALLOW;
  1032.  
  1033.     strARList += '<IMG src="' + arrARImgSrc[iCurAR] + '" title="' + arrARTitles[iCurAR] + '"></IMG>';
  1034.     strARList += '</A>';
  1035.     return strARList;
  1036. }
  1037.  
  1038. function GenerateAuditLevel(rule, prio, strOnChange)
  1039. {
  1040.     var strARList = HTML_CHECK_HEADER + strDisabled[prio] + ' onclick=' + strOnChange + ' ';
  1041.     var i, iCurAL;    // access result set for this rule and access type
  1042.     if (rule)
  1043.     {
  1044.         var adList = rule.AccessDescriptorList;
  1045.         var adEnum = new Enumerator(adList);
  1046.         adEnum.moveFirst();
  1047.         var accessDescriptor = adEnum.item();
  1048.         if (accessDescriptor)
  1049.             iCurAL = accessDescriptor.AuditLevel;
  1050.         else
  1051.             iCurAL = AL_IGNORE;
  1052.     } else
  1053.         iCurAL = AL_IGNORE;
  1054.  
  1055.     switch (iCurAL)
  1056.     {
  1057.     case AL_MONITOR:
  1058.         strARList += "checked ";
  1059.         break;
  1060.     default:
  1061.         break;
  1062.     }
  1063.     strARList += HTML_CHECK_TRAILER;
  1064.     return strARList;
  1065. }
  1066.  
  1067. function GenerateVBAAccessResult(rule, prio, macroOrAuto, strOnChange)
  1068. {
  1069.     var strARList = HTML_SELECT_HEADER + strDisabled[prio] + ' onchange=' + strOnChange + '>';
  1070.     var i, iCurOption;
  1071.     if (rule != null)
  1072.     {
  1073.         var enumARDesc = new Enumerator(rule.AccessDescriptorList);
  1074.  
  1075. // find access descriptor for this access type
  1076.         var adList = rule.AccessDescriptorList;
  1077.         var adEnum = new Enumerator(adList);
  1078.         adEnum.moveFirst();
  1079.         var accessDescriptor = null;
  1080.         iCurOption = 2;
  1081.         while (!adEnum.atEnd())
  1082.         {
  1083.             var acCur = adEnum.item();
  1084.             var atCur = acCur.AccessType;
  1085.             if (    macroOrAuto &&     (atCur == AT_VBA_MACRO_RUN_IN_ORIG ||
  1086.                         atCur == AT_VBA_MACRO_RUN_IN_SPECIAL) ||
  1087.                 !macroOrAuto && (atCur == AT_VBA_AUTO_RUN_IN_ORIG ||
  1088.                         atCur == AT_VBA_AUTO_RUN_IN_SPECIAL) )
  1089.             {
  1090.                 accessDescriptor = acCur;
  1091.                 if (    atCur == AT_VBA_MACRO_RUN_IN_ORIG ||
  1092.                     atCur == AT_VBA_AUTO_RUN_IN_ORIG )
  1093.                 {
  1094.                     if (acCur.AccessResult == AR_ALLOW)
  1095.                     {
  1096.                         iCurOption = 0;
  1097.                         break;
  1098.                     }
  1099.  
  1100.                 }
  1101.                 if (    atCur == AT_VBA_MACRO_RUN_IN_SPECIAL ||
  1102.                     atCur == AT_VBA_AUTO_RUN_IN_SPECIAL )
  1103.                 {
  1104.                     if (acCur.AccessResult == AR_ALLOW)
  1105.                     {
  1106.                         iCurOption = 1;
  1107.                         break;
  1108.                     }
  1109.                 }
  1110.             }
  1111.             adEnum.moveNext();
  1112.         }
  1113.         if (accessDescriptor == null)
  1114.             iCurOption = 0;
  1115.     } else
  1116.         iCurOption = 0;
  1117.  
  1118.     for (i = 0; i <= 2; i++)
  1119.     {
  1120.         strARList += '<OPTION value="' + i + '"';
  1121.         if (i == iCurOption)
  1122.         {
  1123.             strARList += ' selected ';
  1124.         }
  1125.         strARList += '>' + arrVBAOptions[i] + '</OPTION>';
  1126.     }
  1127.     strARList += HTML_SELECT_TRAILER;
  1128.     return strARList;
  1129. }
  1130.  
  1131. function GenerateShutdownAuditLevel(rule, prio, accessType, strOnChange)
  1132. {
  1133.     var strALList = HTML_SELECT_HEADER + strDisabled[prio] + ' onchange=' + strOnChange + '>';
  1134.     var i, iCurAL;    // access result set for this rule and access type
  1135.     if (rule != null)
  1136.     {
  1137.         var enumARDesc = new Enumerator(rule.AccessDescriptorList);
  1138.  
  1139. // find access descriptor for this access type
  1140.         var adList = rule.AccessDescriptorList;
  1141.         var adEnum = new Enumerator(adList);
  1142.         adEnum.moveFirst();
  1143.         var accessDescriptor = null;
  1144.         while (!adEnum.atEnd())
  1145.         {
  1146.             var acCur = adEnum.item();
  1147.             if (acCur.AccessType == accessType)
  1148.             {
  1149.                 accessDescriptor = acCur;
  1150.                 break;
  1151.             }
  1152.             adEnum.moveNext();
  1153.         }
  1154.         if (accessDescriptor == null)
  1155.             iCurAL = AL_IGNORE;
  1156.         else
  1157.             iCurAL = accessDescriptor.AuditLevel;
  1158.     } else
  1159.         iCurAL = AL_IGNORE;
  1160.  
  1161.     for (i = AL_IGNORE; i <= AL_MONITOR; i++)
  1162.     {
  1163.         strALList += '<OPTION value="' + i + '"';
  1164.         if (i == iCurAL)
  1165.         {
  1166.             strALList += ' selected ';
  1167.         }
  1168.         strALList += '>' + arrAuditLevelStrings[i] + '</OPTION>';
  1169.     }
  1170.     strALList += HTML_SELECT_TRAILER;
  1171.     return strALList;
  1172. }
  1173.  
  1174. function GenerateAuditLevelCombo(rule, prio, accessType, strOnChange)
  1175. {
  1176.     var strALList = HTML_SELECT_HEADER + strDisabled[prio] + ' onchange=' + strOnChange + '>';
  1177.     var i, iCurAL;    // access result set for this rule and access type
  1178.     if (rule != null)
  1179.     {
  1180.         var enumARDesc = new Enumerator(rule.AccessDescriptorList);
  1181.  
  1182. // find access descriptor for this access type
  1183.         var adList = rule.AccessDescriptorList;
  1184.         var adEnum = new Enumerator(adList);
  1185.         adEnum.moveFirst();
  1186.         var accessDescriptor = null;
  1187.         while (!adEnum.atEnd())
  1188.         {
  1189.             var acCur = adEnum.item();
  1190.             if (acCur.AccessType == accessType)
  1191.             {
  1192.                 accessDescriptor = acCur;
  1193.                 break;
  1194.             }
  1195.             adEnum.moveNext();
  1196.         }
  1197.         if (accessDescriptor == null)
  1198.             iCurAL = AL_IGNORE;
  1199.         else
  1200.             iCurAL = accessDescriptor.AuditLevel;
  1201.     } else
  1202.         iCurAL = AL_IGNORE;
  1203.  
  1204.     for (i = AL_IGNORE; i <= AL_ALERT; i++)
  1205.     {
  1206.         strALList += '<OPTION value="' + i + '"';
  1207.         if (i == iCurAL)
  1208.         {
  1209.             strALList += ' selected ';
  1210.         }
  1211.         strALList += '>' + arrAuditLevelStrings[i] + '</OPTION>';
  1212.     }
  1213.     strALList += HTML_SELECT_TRAILER;
  1214.     return strALList;
  1215. }
  1216.  
  1217. function GenerateVBAAuditLevel(rule, prio, macroOrAuto, strOnChange)
  1218. {
  1219.     var strALList = HTML_SELECT_HEADER + strDisabled[prio] + ' onchange=' + strOnChange + '>';
  1220.     var i, iCurAL;    // access result set for this rule and access type
  1221.     if (rule != null)
  1222.     {
  1223.         var enumARDesc = new Enumerator(rule.AccessDescriptorList);
  1224.  
  1225. // find access descriptor for this access type
  1226.         var adList = rule.AccessDescriptorList;
  1227.         var adEnum = new Enumerator(adList);
  1228.         adEnum.moveFirst();
  1229.         var accessDescriptor = null;
  1230.         while (!adEnum.atEnd())
  1231.         {
  1232.             var acCur = adEnum.item();
  1233.             var atCur = acCur.AccessType;
  1234.             if (macroOrAuto &&     (acCur.AccessType == AT_VBA_MACRO_RUN_IN_ORIG ||
  1235.                         acCur.AccessType == AT_VBA_MACRO_RUN_IN_SPECIAL) ||
  1236.                 !macroOrAuto &&     (acCur.AccessType == AT_VBA_AUTO_RUN_IN_ORIG ||
  1237.                         acCur.AccessType == AT_VBA_AUTO_RUN_IN_SPECIAL) )
  1238.             {
  1239.                 accessDescriptor = acCur;
  1240.                 break;
  1241.             }
  1242.             adEnum.moveNext();
  1243.         }
  1244.         if (accessDescriptor == null)
  1245.             iCurAL = AL_IGNORE;
  1246.         else
  1247.             iCurAL = accessDescriptor.AuditLevel;
  1248.     } else
  1249.         iCurAL = AL_IGNORE;
  1250.  
  1251.     for (i = AL_IGNORE; i <= AL_MONITOR; i++)
  1252.     {
  1253.         strALList += '<OPTION value="' + i + '"';
  1254.         if (i == iCurAL)
  1255.         {
  1256.             strALList += ' selected ';
  1257.         }
  1258.         strALList += '>' + arrAuditLevelStrings[i] + '</OPTION>';
  1259.     }
  1260.     strALList += HTML_SELECT_TRAILER;
  1261.     return strALList;
  1262. }
  1263.  
  1264. function ChangeApplication(ruleTriple, appNew)
  1265. {
  1266.     var i;
  1267.     for (i = 0; i < 3; i++)
  1268.     {
  1269.         if (ruleTriple[i] != null)
  1270.             ruleTriple[i].Application = appNew;
  1271.         SetRuleTripleAppType(ruleTriple, arrLabelTypes[appNew]);
  1272.     }
  1273. }
  1274.  
  1275. function SetRuleID(rule, type, value, bIsServer)
  1276. {
  1277.     var ruleId = value | bIsServer<<16 | arrGuardIds[type]<<24;
  1278.     rule.RuleID = ruleId;
  1279. }
  1280.  
  1281. function SetRuleIDFromTriple(subindex, ruleTriple, bIsServer)
  1282. {
  1283.     var i, id = 0;
  1284.     for (i = 0; i < 3; i++)
  1285.         if (subindex != i  &&  ruleTriple[i] != null)
  1286.         {
  1287.             id = ruleTriple[i].RuleID & 0x0000ffff;
  1288.             break;
  1289.         }
  1290.     var ruleId = id | bIsServer<<16 | arrGuardIds[subindex]<<24;
  1291.     ruleTriple[subindex].RuleID = ruleId;
  1292. }
  1293.  
  1294. function SetRuleTripleID(ruleTriple, id, bIsServer)
  1295. {
  1296.     var i;
  1297.     for (i = 0; i < 3; i++)
  1298.     {
  1299.         var ruleId = arrGuardIds[i]<<24 | bIsServer<<16 | id;
  1300.         if (ruleTriple[i] != null)
  1301.             ruleTriple[i].RuleID = ruleId;
  1302.     }
  1303. }
  1304.  
  1305. function SetRuleTripleAppType(ruleTriple, appType)
  1306. {
  1307.     var i;
  1308.     for (i = 0; i < 3; i++)
  1309.     {
  1310.         if (ruleTriple[i] != null)
  1311.             ruleTriple[i].AppType = appType;
  1312.     }
  1313. }
  1314.  
  1315. function CreateRule(index, subindex, priority)
  1316. {
  1317.     var ruleList, ruleTriple = arrRuleTriples[index];
  1318.     var strApp = "", iAppType = 0, strAssignment = "";
  1319.     var i;
  1320.     switch(priority)
  1321.     {
  1322.     case PRIOR_LOW:
  1323.     case PRIOR_HIGH:
  1324.         ruleList = ServerRuleList;
  1325.         break;
  1326.     case PRIOR_NORMAL:
  1327.         ruleList = ClientRuleList;
  1328.         break;
  1329.     }
  1330.  
  1331.     for (i = 0; i < 3; i++)
  1332.         if (ruleTriple[i] != null)
  1333.         {
  1334.             strApp = ruleTriple[i].Application;
  1335.             iAppType = ruleTriple[i].AppType;
  1336.             strAssignment = ruleTriple[i].Assignment;
  1337.         }
  1338.     if (strApp == "")
  1339.     {
  1340.         alert("Failed to create rule");
  1341.         return;
  1342.     }
  1343.     var ruleNew = ruleList.CreateRule();
  1344.     ruleNew.Application = strApp;
  1345.     ruleNew.AppType = iAppType;
  1346.     switch (subindex)
  1347.     {
  1348.     case 0:
  1349.         ruleNew.ObjectType = OT_VBAMACRO;
  1350.         break;
  1351.     case 1:
  1352.         ruleNew.ObjectType = OT_SYSTEMPRIV;
  1353.         break;
  1354.     case 2:
  1355.         ruleNew.ObjectType = OT_DEVICEPRIV;
  1356.         break;
  1357.     }
  1358.     ruleNew.Priority = priority;
  1359.     ruleNew.Path = "*";
  1360.     ruleNew.PathType = RT_DEFINITION;
  1361.     ruleNew.Assignment = strAssignment;
  1362.     ruleList.Insert(ruleNew, ruleNew);
  1363.     ruleTriple[subindex] = ruleNew;
  1364.     SetRuleIDFromTriple(subindex, ruleTriple, (priority == PRIOR_HIGH || priority == PRIOR_LOW) ? 1 : 0);
  1365.     return ruleNew;
  1366. }
  1367.  
  1368. function AddToAssignment()
  1369. {
  1370.     ctrlAsgnmt.AddFromSBXList(OT_VBAMACRO, ClientParser, ServerParser, ClientAppParser, ServerAppParser );
  1371.     _ruleList.innerHTML = GetRuleList();
  1372. }
  1373.